/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ejb;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;

/**
 *
 * @author allam
 */
@Stateless
public class GestoreNotiziaBean implements GestoreNotiziaBeanLocal {
    @EJB
    private NotiziaFacadeLocal notiziaFacade;

    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")
 /**
 * Aggiunge una nuova notizia
 * @param titolo Titolo della notizia
 * @param testo Path o percorso dove si trova il Testo della notizia
 * @param autore il recensore creatore della notizia
 * @param data Data d'inserimento della notizia
 * @param listPiattaforme Lista di piattaforme a cui si riferisce la notizia
 * @param immaginePath Path o percorso dove si trova l'immagine da mettere nella notizia
 * titolo e data costituiscono la primary key
 * @return Notizia se esiste gia' e se i suoi dati verranno aggiornati, null altrimenti
 */  
    @Override
    public Notizia addNotizia(String titolo, String testo, Utente autore, Date data,List<Piattaforma> listPiattaforme,String immaginePath){
        Notizia n = new Notizia();     
        n.setTitolo(titolo);
        n.setTesto(testo);
        n.setAutore(autore);
        n.setData(data);
        n.setListPiattaforme(listPiattaforme);
        n.setImmaginePath(immaginePath);
        if (!notiziaFacade.NotiziaEsistente(n)) {
            notiziaFacade.create(n);
        }
        else {
            return null;
        }
        return n;       
   }
/**
 * Cerca la notizia specificata
 * @param idNotizia Id della notizia da cercare
 * @return Notizia se l'id esiste, null altrimenti
 */ 
    @Override
    public Notizia trova(long idNotizia){
        return notiziaFacade.find(idNotizia);
    }
    
/**
 * Cerca tutte le notizie presenti
 * @return List<Notizia> se sono presenti notizie, null altrimenti
 */ 
    @Override
    public List<Notizia> visualizzaNotizie(){
        return notiziaFacade.findAll();
    }
    
    
    
/**
 * Modifica i dati di una notizia
 * @param titolo Titolo della notizia
 * @param testo Path o percorso dove si trova il Testo della notizia
 * @param data Data d'inserimento della notizia
 * @param lista Lista di piattaforme a cui si riferisce la notizia
 * @param immaginePath Path o percorso dove si trova l'immagine da mettere nella notizia
 * titolo e data non vengono cambiati, come il creatore della notizia, perche' costituiscono la primary key
 * @return Notizia se esiste gia' e se i suoi dati verranno aggiornati, null altrimenti
 */  
    @Override
    public Notizia aggiorna(String titolo, String testo, Date data, List<Piattaforma> lista, String immaginePath){
        Notizia n = notiziaFacade.esiste(titolo, data);
        if (n == null)
            return null; 
        
        n.setTesto(testo);//da cambiare
        n.setImmaginePath(immaginePath);
        if(!lista.isEmpty()) 
            n.setListPiattaforme(lista);
        return n;
    }
    /**
     * Trova tutte le notizie presente nel Database
     * @param titolo sottostringa da cercare tra tutti i titoli delle notizie
     * presenti nel Database
     * @param testo sottostringa da cercare nei testi delle notizie presenti nel
     * Database
     * @param piattaforma sottostringa da cercare tra tutte le piattaforme delle
     * notizie presente nel Database
     * @param data data della pubblicazione delle notizie da cercare
     * @return Elenco di notizie, altrimenti restituisce una lista vuota
     */
    public List mostraElenco(String titolo, String testo, String piattaforma, String data)throws FileNotFoundException, IOException{
        return notiziaFacade.findSome(titolo,testo, piattaforma, data);      
    }
 /**
 * Elimina una notizia
 * @param notizia Notizia da eliminare
 * return true se la notizia viene eliminata, false altrimenti
 */
    public boolean elimina(Notizia notizia){
        if (!notiziaFacade.NotiziaEsistente(notizia))
            return false;
                    
        notiziaFacade.remove(notizia);
        return true;
    }
}
